<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/entities/NamedEntity.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/entities/Role.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/entities/Employee.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/utils/Str.php';
/**
 * Класс для работы с человеком, имеющим доступ в систему
 */
class Person extends NamedEntity {
	/** Логин */
	private $login;
	/** Пароль */
	private $password;
	/** Фамилия */
	private $surname;
	/** Отчество */
	private $patronymic;
	/** Массив экземпляров класса Role - все роли пользователя в системе */
	private $roles = array();
	/** Массив экземпляров класса Post - все должности, занимаемые человеком */
	private $posts = array();
	/**
	 * Метод, возвращающий логин
	 * @return $this->login Логин
	 */
	public function getLogin() {
		return $this->login;
	}
	/**
	 * Метод, указывающий значение логина
	 * @param unknown_type $login Значение логина
	 */
	public function setLogin($login) {
		$this->login = (string)$login;
	}
	/**
	 * Метод, возвращающий пароль
	 * @return $this->password Пароль
	 */
	public function getPassword() {
		return $this->password;
	}
	/**
	 * Метод, указывающий значение пароля
	 * @param unknown_type $password Значение пароля
	 */
	public function setPassword($password) {
		$this->password = (string)$password;
	}
	/**
	 * Метод, возвращающий фамилию
	 * @return $this->surname Фамилия
	 */
	public function getSurname() {
		return $this->surname;
	}
	/**
	 * Метод, устанавливающий значение фамилии
	 * @param $surname Значение фамилии
	 */
	public function setSurname($surname) {
		$this->surname = (string)$surname;
	}
	/**
	 * Метод, возвращающий отчество
	 * @return $this->patronymic Отчество
	 */
	public function getPatronymic() {
		return $this->patronymic;
	}
	/**
	 * Метод, устанавливающий значение отчества
	 * @param unknown_type $patronymic Значение отчества
	 */
	public function setPatronymic($patronymic) {
		$this->patronymic = (string)$patronymic;
	}
	/**
	 * Метод, возвращающий массив экземпляров класса Role -
	 * все роли пользователя в системе
	 * @return $this->roles Все роли пользователя в системе
	 */
	public function getRoles() {
		return $this->roles;
	}
	/**
	 * Метод, добавляющий значения в массив экземпляров класса Role
	 * @param Role $role Значение роли пользователя в системе
	 */
	public function addRole(Role $role) {
		$this->roles[] = $role;
	}
	/**
	 * Метод, возвращающий массив экземпляров класса Post -
	 * все должности, занимаемые человеком
	 * @return $this->posts Все должности, занимаемые человеком
	 */
	public function getPosts() {
		return $this->posts;
	}
	/**
	 * Метод, добавляющий значения в массив экземпляров класса Post
	 * @param Employee $post Значение должности, занимаемая человеком
	 */
	public function addPost(Employee $post) {
		$this->posts[] = $post;
	}
	/**
	 * Метод, возвращающий ФИО или логин в зависимости от значения параметра
	 * $isNotInitials истина или ложь соответственно
	 * @param unknown_type $isNotInitials Парамер вывода информации о пользователе 
	 * (ФИО или логин)
	 */
	public function getFullName($isNotInitials = false) {
		if(Str::isNotEmpty($this->surname)) {
			$fullName = $this->surname;
			if(Str::isNotEmpty($this->getName())) {
				if($isNotInitials) {
					$fullName .= ' '.$this->getName();
				} else {
					$fullName .= '&nbsp;';
					$fullName .= Str::substring($this->getName(), 0, 1);
					$fullName .= '.';
				}
				if(Str::isNotEmpty($this->patronymic)) {
					if($isNotInitials) {
						$fullName .= ' '.$this->patronymic;
					} else {
						$fullName .= '&nbsp;';
						$fullName .= Str::substring($this->patronymic, 0, 1);
						$fullName .= '.';
					}
				}
			}
			return $fullName;
		} else {
			return $this->login;
		}
	}
}
?>